<?php
/*
 * @category 	/
 * @author 		Sung Hoon, Cho (akdddnet@gmail.com)
 * @since		2011. 1. 3.
 * @license		BSD License
 * @version		0.1
 * 
 * 주소 체계 설명
 * / 					: ROOT
 * /modulename			: Controller 명.
 * /modulename/method	: Controller안에 호출 될 함수명.
 * 
 * 예) http://test.com/test/main/가나다/라마바사아/으이익.
 * 호출되는 Controller : TestController
 * 
 * https://github.com/utumdol/phpworks/wiki/ 를 참고해서 만들었습니다. (말이 참고지.. 거의 그대로 배낌 -_-);; 
 */
 
	require_once __DIR__."/__web-inf/config.php";
	global $CFG;
	## routing ##
	$path = ClassSupport::getRouterURL();
	ClassSupport::setAdminPath($CFG->PATH->ADMIN);
	
	$path_count = count($path);
	
	// controller, method 정의.
	$slice = 3;
	$module_name = DEFAULT_MODULE_NAME;
	$controller_name = DEFAULT_CONTROLLER_NAME;
	$method_name = DEFAULT_METHOD_NAME;
	$slice = 3;	// 일반, 관리자 일 경우 path을 자르는 위치가 달라짐.
	
	// template 기본 설정.
	$tpl = new Template("default");
	$tpl->define(array('main'=>"_index.html"));
	
	if($path_count == 2) {
		$method_name = $path[1];
	} else if($path_count >= 3) {
		// 관리자 페이지 일 경우.
		// 도메인/admin/member/list 관리자는 무조건 3개 이상이 됨.
		if(ClassSupport::isAdminPath()) {
			$slice = 4;
			
			$module_name = $path[2];
			$controller_name = ucwords($module_name);
			$method_name = $path[3];
			if(Common::isNullOrEmpty($method_name))
				$method_name = DEFAULT_METHOD_NAME;
			
			require_once $CFG->CLASSES_DIR."/_base/filter/AdminFilter.php";
			$admin_filter = new AdminFilter();
			
			if($admin_filter->doFilter()) {
				// 관리자 전용 template_ 설정.
				$tpl = new Template("default/admin");
				$tpl->define(array('main'=>"_index.html"));
			}
		} else {
			$module_name = $path[1];
			$controller_name = ucwords($module_name); 	
			$method_name = $path[2];
		}
	}
	// Controller 접미어 붙여주기~
	$controller_name .= "Controller";
	
	ClassSupport::getClassLoad($controller_name, $CFG->CLASS_DIR);
	$controller = new $controller_name;
	
	// start 함수가 존재할 경우 실행시킴.
	if(method_exists($controller, "start")) {
		call_user_func_array(array(&$controller, "start"), array());
	} 
	
	// 아래 call_user_func_array 보다 위에 존재해야됩니다. 
	// 상황에 따라서 body값을 변경해야되는 경우가 발생하는데 call_user_func_array보다 아래에 있으면 값을 변경할수가 없음.
	$tpl->define(array("body"=>strtolower($module_name)."/".strtolower($method_name).".html"));
	
	// 호출된 모듈 및 메소드 정보 전달.
	$call_info = new stdClass;
	$call_info->module = strtolower($module_name);
	$call_info->method = strtolower($method_name);
	/*
	if( strpos($call_info->method, '_view') !== FALSE ) 
		$call_info->method = strtolower(str_replace("_view", "", $call_info->method));
	*/
	/*
	// 페이지 접근 할때마다 현재 페이지 정보 가져오기
	require_once $CFG->CLASSES_DIR."/default/DefaultDao.php";
	$dao = new DefaultDao($CFG->mysql);
	$menuinfo = $dao->getMenu($call_info->module, $call_info->method);
//Common::print_r($menuinfo);
	// DB정보가 존재할 경우.
	$pcwww = $CFG->PCWWW;
	$title = "";
	$subtitle2 = "";
	if(!Common::isNullOrEmpty($menuinfo->menu_info)) {
		$pcwww = $menuinfo->menu_info->s_pcurl;
		$title = $menuinfo->menu_info->m_name;
		$title2 = $menuinfo->menu_info->s_name2;
	}
	*/

		
	// 중요한 정보들이 CFG에 많이 담겨 있기 때문에... 통채로 CFG를 넘기지 마세요~
	// 필요한 항목 추가 해서 사용하면됨
	$min_cfg = new stdClass;
	$min_cfg->PATH = $CFG->PATH;			// 경로 관련설정값
	$min_cfg->CALL_INFO = $call_info;		// 호출 정보값
	
	$tpl->assign(array(
		"CFG"=>$min_cfg
	));
	
	// http://kr2.php.net/manual/en/function.call-user-func-array.php 정독 하세요!!
	call_user_func_array(array($controller, $method_name), array_slice($path, $slice));

	$tpl->print_("main");